// CyTargetLinker,
// a Cytoscape plugin to extend biological networks with regulatory interaction
//
// Copyright 2011-2013 Department of Bioinformatics - BiGCaT, Maastricht University
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//       http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
package cytargetlinker.io;

import java.io.File;
import java.io.FileInputStream;
import java.util.List;

import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;

import org.xml.sax.InputSource;
import org.xml.sax.helpers.ParserAdapter;

import cytargetlinker.data.RIN;

public class XgmmlParser {
	
	public RIN parseXgmmlFile(File file, List<String> ids) throws Exception {
		SAXParserFactory spf = SAXParserFactory.newInstance();
		SAXParser sp = spf.newSAXParser();
		ParserAdapter pa = new ParserAdapter(sp.getParser());
		CyTargetLinkerParser handler = new CyTargetLinkerParser(ids);
		pa.setContentHandler(handler);
		pa.parse(new InputSource(new FileInputStream(file)));
		
		RIN rin = new RIN();
		rin.setName(handler.getNetworkName());
		rin.setFile(file);
		rin.getEdges().addAll(handler.getEdgeList());
		if(handler.getNetworkProperties().containsKey("Type")) {
			rin.setInteractionType(handler.getNetworkProperties().get("Type"));
		}
		handler.clean();
		handler = null;

		return rin;
	}
}